缓冲区溢出攻击的危害
缓冲区溢出攻击会造成以下危害:
缓冲区溢出攻击:缓冲区溢出攻击的原理是向程序缓冲区写入超出其边界的内容,造成缓冲区的溢出,使得程序转而执行其他攻击者指定的代码,通常是为攻击者打开远程连接的ShellCode,以达到攻击目标。近年来著名的蠕虫如Code-Red、SQL.Slammer、Blaster 和Sasser 等,都是通过缓冲区溢出攻击获得系统权限后进行传播。
蠕虫攻击:网络蠕虫会利用缓冲区溢出构造缓冲区溢出程序,进而远程控制易感目标主机,然后传播蠕虫程序。
拒绝服务攻击:通过连续向攻击目标发送超出其处理能力的过量数据,消耗其有限的网络链路或操作系统资源,使之无法为合法用户提供有效服务。某些操作系统设计不完善可能会因为缓冲区溢出而重启、崩溃,造成拒绝服务器攻击。
非法提升权限:攻击者利用某种手段或者利用系统的漏洞,获得本不应具有的权限。最为典型的非法提升权限攻击为缓冲区溢出攻击。另外,通过猜测口令、植入木马、预留后门等,也可以使攻击者获得本不应具有的权限。一般来说,权限提升仅是一种手段,后续往往伴随着对目标系统信息资源和服务的非法操作。
内存破坏类攻击:此类漏洞的共同特征是由于某种形式的非预期的内存越界访问,可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。对内存破坏类漏洞再按来源细分,可以分出如下子类型:栈缓冲区溢出、堆缓冲区溢出、静态数据区溢出、格式串问题、越界内存访问、释放后重用和二次释放。
预防缓冲区溢出攻击的方法有以下这些:
严格编写程序代码:借助工具来协助程序开发者解决缓冲区溢出,但是可是由于C语言的本身特点,这些工具不能找出所有的缓冲区溢出漏洞,因此侦错技术只是被用来减少缓冲区溢出漏洞,并不能完全消灭,想要完全消灭这类漏洞,就需要程序员严格编写代码。
禁止执行堆栈数据段:在进行系统操作时数据地址空间不可执行,从而禁止攻击者执行被植入的攻击代码,这种措施在一定的程度上也对缓冲区溢出攻击起到了防范作用。但是攻击者不一定非要通过植入攻击代码来实现缓冲区溢出攻击,所以这种方法并不能彻底解决缓冲区溢出攻击。
利用程序编译器的边界检查:植入攻击代码时引起缓冲区溢出攻击的一个方面,改变程序执行的流程则是另一个方面,而利用程序编译器的边界检查则使得缓冲区溢出攻击不可能实现,从而完全消除了缓冲区溢出攻击的威胁。
指针完全性检查:程序指针完整性检查和边界检查略有不同,程序指针完整性检查在程序指针被改变之前检测,因此即使攻击者成功改变了程序的指针,也会因为先前检测到指针的变化而失效,这样虽然不能完全解决问题,但是他确实阻止了大多数的缓冲区溢出攻击,并且这种方法在性能方面有很大优势,兼容性特别优良。
及时修补漏洞:攻击者利用缓冲区溢出的主要攻击手段就是利用服务器程序、数据库程序、操作系统等的漏洞,所以及时修补这些漏洞可以从根本上解决缓冲区溢出的问题,这种漏洞可以通过打补丁、升级软件等方法来解决。